package com.shujia.collection_;

import org.junit.Test;

import java.util.*;

public class CollectionDemo1 {
    @Test
    public void test3() {
        // 遍历操作不需获取Collection或数组的长度，无需使用索引访问元素。
        Collection c = new ArrayList();
        c.add(10);
        c.add("abc");
        c.add("def");
        c.add("222");

        for (Object obj : c) {
            if (obj instanceof Integer) {
                System.out.println("-----");
                Integer num = (Integer) obj;
                System.out.println(num);
            } else if (obj instanceof String) {
                System.out.println("******");
                String str = (String) obj;
                System.out.println(str);
            }

        }


    }


    @Test
    public void test2() {
        //    11、遍历
//        iterator()：返回迭代器对象，用于集合遍历
        Collection c = new ArrayList();
//        c.add(10);
        c.add("abc");
        c.add("def");
        c.add("222");

        // Iterator
        Iterator it = c.iterator();

        while (it.hasNext()) {
            String str = (String) it.next();
            System.out.println(str);
            // 移除的是当前元素
            c.add("333");

            it.remove();
            it.remove();
        }

        System.out.println(c);

    }

    @Test
    public void test1() {
//    6、删除
//    boolean remove(Object obj) ：通过元素的equals方法判断是否是要删除的那个元素。只会删除找到的第一个元素
//    boolean removeAll(Collection coll)：取当前集合的差集
        Collection c = new ArrayList();
        c.add(10);
        c.add("abc");
        c.add("def");
        c.add("222");
        // c.remove("abc");
        System.out.println(c);

//    boolean retainAll(Collection c)：取两个集合的交集，把交集的结果存在当前集合中，不影响c
        Collection c1 = new ArrayList();
        c1.add(10);
        c1.add("abc");
        c1.add("tttt");
        c1.add("hhh");
        // 把计算结果报错的调用方法的集合里面
        c.retainAll(c1);
        System.out.println(c);

//    8、集合中的元素是否相同
//        boolean equals(Object obj)
        Collection c2 = new ArrayList();
        c2.add(10);
        c2.add("abc");
        System.out.println(c.equals(c2));// true

//    9、转成对象数组
//        Object[] toArray()
        Object[] objs = c.toArray();
        System.out.println(Arrays.toString(objs));

//    10、获取集合对象的哈希值
//        hashCode()
        System.out.println(c.hashCode());


    }


    public static void main(String[] args) {
        Collection c = new ArrayList();

//        1、添加
//        add(Object obj)
        c.add(10);
        c.add("abc");
        Person person = new Person();
        c.add(person);

//        addAll(Collection coll)
        Collection c2 = new LinkedList();
        c2.add("qq");
        c2.add("ww");
        // 把c2里面的元素都添加到对象c里面
        c.addAll(c2);

        System.out.println(c);

//        2、获取有效元素的个数
//        int size()
        System.out.println(c.size());

//        3、清空集合
//        void clear()
        c.clear();
        System.out.println(c.size());

//        4、是否是空集合
//        boolean isEmpty()
        System.out.println(c.isEmpty());

//        5、是否包含某个元素
//        boolean contains(Object obj)：调用的集合是否包含了参数的元素。
        c.add("aa");
        c.add("bb");
        c.add(11);
        c.add(22);
        System.out.println(c.contains("aa"));
        System.out.println(c.contains(22));
        System.out.println(c.contains("234"));
//        boolean containsAll(Collection c)：比较调用的集合是否包含参数集合里面的所有元素。
        Collection c3 = new Vector();
        c3.add("aa");
        c3.add("bb");
        c3.add(33);
        boolean flag = c.containsAll(c3);
        System.out.println(flag);


    }
}
